package cn.xingzhe.monster.user.application.service;

import cn.xingzhe.monster.user.application.dto.RoleDTO;

import java.util.List;

/**
 * 角色应用服务接口
 *
 * @author System
 * @version 1.0.0
 * @since 2024-01-01
 */
public interface RoleApplicationService {

    /**
     * 创建角色
     *
     * @param roleDTO 角色DTO
     * @return 角色DTO
     */
    RoleDTO createRole(RoleDTO roleDTO);

    /**
     * 更新角色
     *
     * @param roleId  角色ID
     * @param roleDTO 角色DTO
     * @return 角色DTO
     */
    RoleDTO updateRole(String roleId, RoleDTO roleDTO);

    /**
     * 删除角色
     *
     * @param roleId 角色ID
     */
    void deleteRole(String roleId);

    /**
     * 为角色分配权限
     *
     * @param roleId        角色ID
     * @param permissionIds 权限ID列表
     * @return 角色DTO
     */
    RoleDTO assignPermissionsToRole(String roleId, List<String> permissionIds);

    /**
     * 为用户分配角色
     *
     * @param userId  用户ID
     * @param roleIds 角色ID列表
     */
    void assignRolesToUser(String userId, List<String> roleIds);

    /**
     * 移除用户角色
     *
     * @param userId  用户ID
     * @param roleIds 角色ID列表
     */
    void removeRolesFromUser(String userId, List<String> roleIds);

    /**
     * 根据ID获取角色
     *
     * @param roleId 角色ID
     * @return 角色DTO
     */
    RoleDTO getRoleById(String roleId);

    /**
     * 获取所有角色
     *
     * @return 角色列表
     */
    List<RoleDTO> getAllRoles();
}

